#!/usr/bin/env python3
"""
文渊阁文档生成器
功能：从代码注释生成双轨制文档
"""

import os
import re
import argparse
from pathlib import Path

class 文渊阁文档生成器:
    def __init__(self):
        self.样式表 = """
        /* 竹简样式 - 传承典籍专用 */
        .bamboo-slip {
            font-family: "SimSun", serif;
            background-color: #f5e8c0;
            padding: 20px;
            border: 1px solid #8b4513;
            line-height: 1.8;
            color: #3d2b1f;
        }
        
        .bamboo-slip h1, .bamboo-slip h2, .bamboo-slip h3 {
            color: #8b0000;
            border-bottom: 1px solid #8b4513;
            padding-bottom: 5px;
        }
        
        .bamboo-slip code {
            background-color: #e9d9b0;
            padding: 2px 4px;
            border-radius: 3px;
        }
        """
    
    def 解析文言注释(self, 文件路径):
        """解析源代码中的文言注释"""
        注释内容 = {}
        
        with open(文件路径, 'r', encoding='utf-8') as f:
            内容 = f.read()
        
        # 提取文件头注释
        文件头匹配 = re.search(r'"""(.*?)"""', 内容, re.DOTALL)
        if 文件头匹配:
            注释内容['文件头'] = 文件头匹配.group(1).strip()
        
        # 提取类注释
        类注释匹配 = re.findall(r'class (.*?):\s*"""(.*?)"""', 内容, re.DOTALL)
        for 类名, 类注释 in 类注释匹配:
            注释内容.setdefault('类', {})[类名] = 类注释.strip()
        
        # 提取方法注释
        方法注释匹配 = re.findall(r'def (.*?)\(.*?\):\s*"""(.*?)"""', 内容, re.DOTALL)
        for 方法名, 方法注释 in 方法注释匹配:
            注释内容.setdefault('方法', {})[方法名] = 方法注释.strip()
        
        return 注释内容
    
    def 生成技术文档(self, 注释内容, 输出路径):
        """生成现代技术文档"""
        html内容 = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>韵律模块技术文档</title>
            <style>
                body {{ font-family: Arial, sans-serif; margin: 20px; }}
                h1, h2, h3 {{ color: #333; }}
                code {{ background-color: #f4f4f4; padding: 2px 4px; }}
            </style>
        </head>
        <body>
            <h1>韵律模块技术文档</h1>
            <div class="module-info">
                <h2>模块信息</h2>
                <pre>{注释内容.get('文件头', '')}</pre>
            </div>
        """
        
        if '类' in 注释内容:
            html内容 += "<h2>类说明</h2>"
            for 类名, 类注释 in 注释内容['类'].items():
                html内容 += f"""
                <div class="class-info">
                    <h3>{类名}</h3>
                    <pre>{类注释}</pre>
                </div>
                """
        
        if '方法' in 注释内容:
            html内容 += "<h2>方法说明</h2>"
            for 方法名, 方法注释 in 注释内容['方法'].items():
                html内容 += f"""
                <div class="method-info">
                    <h3>{方法名}</h3>
                    <pre>{方法注释}</pre>
                </div>
                """
        
        html内容 += "</body></html>"
        
        with open(输出路径, 'w', encoding='utf-8') as f:
            f.write(html内容)
    
    def 生成传承典籍(self, 注释内容, 输出路径):
        """生成文言文传承典籍"""
        html内容 = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>文渊阁藏本·韵律三要</title>
            <style>{self.样式表}</style>
        </head>
        <body>
            <div class="gitee-page">
                <header class="gitee-header">
                    <h1>文渊阁藏本</h1>
                    <p>项目：韵律三要　版本：平水韵·甲辰版</p>
                </header>
                <main class="bamboo-slip">
                    <h1>韵律三要</h1>
                    <pre>{注释内容.get('文件头', '')}</pre>
        """
        
        if '类' in 注释内容:
            html内容 += "<h2>类法要</h2>"
            for 类名, 类注释 in 注释内容['类'].items():
                html内容 += f"""
                <article>
                    <h3>{类名}</h3>
                    <pre>{类注释}</pre>
                </article>
                """
        
        if '方法' in 注释内容:
            html内容 += "<h2>术数篇</h2>"
            for 方法名, 方法注释 in 注释内容['方法'].items():
                html内容 += f"""
                <article>
                    <h3>{方法名}</h3>
                    <pre>{方法注释}</pre>
                </article>
                """
        
        html内容 += """
                </main>
            </div>
        </body>
        </html>
        """
        
        with open(输出路径, 'w', encoding='utf-8') as f:
            f.write(html内容)
    
    def 生成文档(self, 源文件路径, 输出目录, 格式='all'):
        """主文档生成方法"""
        注释内容 = self.解析文言注释(源文件路径)
        
        if 格式 in ['all', 'tech']:
            技术文档路径 = os.path.join(输出目录, '技术文档', '韵律模块.html')
            os.makedirs(os.path.dirname(技术文档路径), exist_ok=True)
            self.生成技术文档(注释内容, 技术文档路径)
            print(f"已生成技术文档: {技术文档路径}")
        
        if 格式 in ['all', 'classic']:
            传承文档路径 = os.path.join(输出目录, '传承典籍', '韵律三要.html')
            os.makedirs(os.path.dirname(传承文档路径), exist_ok=True)
            self.生成传承典籍(注释内容, 传承文档路径)
            print(f"已生成传承典籍: {传承文档路径}")

def main():
    parser = argparse.ArgumentParser(description='文渊阁文档生成器')
    parser.add_argument('--format', choices=['all', 'tech', 'classic'], 
                       default='all', help='输出格式: all|tech|classic')
    parser.add_argument('--output', '-o', default='build', 
                       help='输出目录')
    parser.add_argument('--source', '-s', default='src/poetics/rhythm.py',
                       help='源文件路径')
    
    args = parser.parse_args()
    
    生成器 = 文渊阁文档生成器()
    生成器.生成文档(args.source, args.output, args.format)

if __name__ == '__main__':
    main()